Web のセマンティクスにおける Push と Pull
パブリックであるため、だれがアクセスしどう利用するかは利用規約以上に規定/制限していない。つまり「セマンティクスに基づいて作成し公開しているので、同じくセマンティクスに基づいて自由に消費して欲しい」という姿勢で実装していることになる。これを消費側の需要に委ねた Pull 型の実装 と呼ぶことにしよう。 しかしこれは、本来の「タイトルを記述する」という <title> の役割を超え、それを 消費するクライアントの挙動に対して、コンテンツ提供側が最適化をした結果 と見ることができるだろう。
これを Push 型の実装 と呼ぶことにしよう。
このように、「実世界の実装がある一定の方式で普及してしまった結果、標準ベースで変更を入れる余地がないまでに固着してしまった状態」も、広義には Ossification (硬直化) と呼ぶことができるだろう。
ところで、 デバイス自体の DPR が 2 であることは、サーバが x2 の画像を返すべきことを本当に意味するだろうか?
仕様上はそのまま「DPR が 2 である」ことを意味する以上の定義はない。それを踏まえてどの画像を返すかをサーバが決めているだけだ、これも Push 型の実装ととらえることができる。
クライアントからありとあらゆる情報を収集し、それを条件に分岐を書くことで「クライアントが求める適切なものはこれだ」と思うものを想像で返す実装は可能だ。しかし、それはどこまでいっても提供側の「思い込み」の可能性がある。もっと酷く言えば、この画像を表示させたいという「提供側の都合を押し付けている」だけとも言えるかもしれない。
Web 開発者はこの現状を「これだからブラウザは~」というマクロな主語で非難することがよくあるが、ブラウザベンダがやりたくてやっているわけではなく、同じ大きさの主語で言えばむしろ悪いのは「Web 開発者」と言える。しかし、「ブラウザは」と非難している開発者は「Web 開発者のせいで」というマクロなブーメランが自分に向けられた場合に「自分のせいではない」というミクロな主語で回避するために、当事者意識をもってこの問題を捉えている人は少ない。 さて、 回線が Wi-Fi であることはネットワークが潤沢であることを、未来永劫意味するだろうか?
一方で、そういう教育の延長で、その裏にある「GET には GET のセマンティクスが、 POST には POST のセマンティクスがあり」の部分に向き合う機会がなく、セマンティクス実装の基本を「実利/実害や挙動に呼応する Push ベース」で考えてしまう、悪く言えば「Push ベースでしか考えられない」開発者がいるのも事実だと思う。このとき Push 型で考えているという事実自体に、気づくきっかけも、教えてくれる人も、実際は少ないのかもしれない。 そのエコシステムの一部として、そして一人の Web 開発者の矜持として、「今自分が Push をしているのか、 Pull をしているのか」は、意識し続けていきたいと思う。